/* 
 * File:   ErreurInterpreteur.h
 * Author: lazzamar
 *
 * Created on 19 novembre 2012, 17:51
 */

#ifndef ERREURINTERPRETEUR_H
#define	ERREURINTERPRETEUR_H

#include <exception>
#include <iostream>

using namespace std;
/*! \file ErreurInterpreteur.h
    \brief La spécification de la classe ErreurInterpreteur
    
    Décrit la liste des méthodes et attributs associés à la classe ErreurInterpreteur
    \author lazzamar
    \date 16/12/2012
 */
/*! \class ErreurInterpreteur
    \brief La classe mère représentant les exceptions déclenchées par
 l'interpreteur du langage.
    
    Cette classe permet de créer les exceptions de l'interpreteur. Elle est la
 classe mère de toutes les exceptions de l'interpreteur. La méthode suivante est
 le message d'erreur de base.
    \li what
 */
class ErreurInterpreteur : public exception {
	public:
		/*! \fn const char* what()
			\brief Message associé à l'exception.

		 Cette fonction renvoie une chaine de caractère décrivant l'exception.
			\return Une chaine constante.
		*/
		const char* what() const throw()
		{
			return "L'interpreteur a rencontré une erreur innattendue.\n";
		}
		
		/*! \fn ErreurInterpreteur();
			\brief Constructeur de la classe ErreurInterpreteur.

		Ce constructeur construit une exception liée à l'interpreteur.
		*/
		ErreurInterpreteur(){}
};

/*! \class ErreurChaine
    \brief La classe des exceptions sur une chaine.
    
	Cette classe gère les chaines mal entrées dans le programme à analyser.
	Elle redéfinit la fonction de la classe mère suivante :
    \li what
 */
class ErreurChaine : public ErreurInterpreteur {
	public:
		/*! \fn const char* what()
			\brief Message associé à l'exception.

		 Cette fonction renvoie une chaine de caractère décrivant l'exception.
			\return Une chaine constante.
		*/
		const char* what() const throw()
		{
			return "Expected \"\n";
		}
		
		/*! \fn ErreurChaine();
			\brief Constructeur de la classe ErreurChaine.

		Ce constructeur construit une exception liée une chaine mal entrée.
		*/
		ErreurChaine(){}
};

/*! \class ErreurNomFichier
    \brief La classe des exceptions sur le nom du fichier.
    
	Cette classe gère le mauvais nom d'un fichier mal entré dans le programme.
 */
class ErreurNomFichier : public ErreurInterpreteur {
	public:

		/*! \fn ErreurNomFichier();
			\brief Constructeur de la classe ErreurNomFichier.

		Ce constructeur construit une exception liée au nom du fichier
		incorrect.
		*/
		ErreurNomFichier(){}
};

/*! \class ErreurTestSymbole
    \brief La classe des exception du test des symboles.
    
    Cette classe permet une sortie non brutale du code après exécutions des
 fonctions de test des symboles dans les lecteurs de phrase.
 */
class ErreurTestSymbole : public ErreurInterpreteur {
	public:
		
		/*! \fn ErreurTestSymbole();
			\brief Constructeur de la classe ErreurTestSymbole.

		Ce constructeur construit une exception liée à la fonction de test des
		symbole des lecteur de phrases. Permet une sortie conventionnelle du
		programme.
		*/
		ErreurTestSymbole(){}
};

/*! \class ErreurStandard
    \brief La classe des exceptions de la fonction d'erreur des lecteurs de
 symboles.
    
    Cette classe permet une sortie non brutale du code après exécutions des
 fonctions d'erreur.
 */
class ErreurStandard : public ErreurInterpreteur {
	public:

		/*! \fn ErreurStandard();
			\brief Constructeur de la classe ErreurStandard.

		Ce constructeur construit une exception liée à la fonction d'erreur des
		lecteur de phrases. Permet une sortie conventionnelle du programme.
		*/
		ErreurStandard(){}
};

/*! \class ErreurMaths
    \brief La classe des exceptions des erreurs mathématiques.
    
    Cette classe permet de lever une exception dans le cas d'une mauvaise
 opération mathématique. Elle redéfinit la méthode de la classe mère suivante :
    \li what
 */
class ErreurMaths : public ErreurInterpreteur {
	public:
		
		/*! \fn const char* what()
			\brief Message associé à l'exception.

		 Cette fonction renvoie une chaine de caractère décrivant l'exception.
			\return Une chaine constante.
		*/
		const char* what() const throw()
		{
			return "Une erreur mathématique est survenue (division par 0 ?)\n";
		}
		
		/*! \fn ErreurMaths();
			\brief Constructeur de la classe ErreurMaths.

		Ce constructeur construit une exception liée à une erreur mathématique.
		*/
		ErreurMaths(){}
};

/*! \class ErreurInitialisation
    \brief La classe des exceptions des erreurs d'initialisation.
    
    Cette classe permet de lever une exception dans le cas d'une mauvaise
 initialisation. Elle redéfinit la méthode de la classe mère suivante :
    \li what
 */
class ErreurInitialisation : public ErreurInterpreteur {
	public:
		/*! \fn const char* what()
			\brief Message associé à l'exception.

		 Cette fonction renvoie une chaine de caractère décrivant l'exception.
			\return Une chaine constante.
		*/
		const char* what() const throw()
		{
			return "Erreur : Variable non initialisée\n";
		}
		
		/*! \fn ErreurInitialisation();
			\brief Constructeur de la classe ErreurInitialisation.

		Ce constructeur construit une exception liée à la mauvaise
		initialisation d'une variable.
		*/
		ErreurInitialisation(){}
};

#endif	/* ERREURINTERPRETEUR_H */

